#include <stdio.h>     // 提供输入输出函数，如 scanf、printf
#include <limits.h>    // 提供常量 INT_MAX，用于初始化最大整数值

int main() {
    // step 1# 读取查询次数
    int numQueries;
    scanf("%d", &numQueries);  // 输入查询数量

    // step 2# 定义数组保存每个查询的到达时间和最大响应码
    int arrivalTime[numQueries];   // HOST 收到报文的时间
    int maxRespCode[numQueries];   // 最大响应时间字段值

    // step 3# 读取每个查询的到达时间和最大响应码
    for (int i = 0; i < numQueries; i++) {
        scanf("%d", &arrivalTime[i]);    // 输入第 i 个查询的到达时间
        scanf("%d", &maxRespCode[i]);    // 输入第 i 个查询的最大响应码
    }

    // step 4# 初始化最小响应时间为最大整数值
    int minResponseTime = INT_MAX;   // 当前最小响应时间

    // step 5# 遍历所有查询，计算最小的响应时间
    for (int i = 0; i < numQueries; i++) {
        int maxRespTime = 0;   // 当前查询的最大响应时间

        // step 6# 根据 maxRespCode 值的范围确定响应时间
        if (maxRespCode[i] < 128) {
            // step 6.1# 若小于 128，直接使用其值
            maxRespTime = maxRespCode[i];   // 响应时间直接等于最大响应码
        } else {
            // step 6.2# 若大于等于 128，使用指数-尾数公式计算
            int exp = (maxRespCode[i] & 0x70) >> 4;   // 提取第 4~6 位作为指数 exp
            int mant = maxRespCode[i] & 0x0F;         // 提取低 4 位作为尾数 mant
            maxRespTime = (mant | 0x10) << (exp + 3); // 计算实际最大响应时间
        }

        // step 7# 计算当前查询的实际响应时间
        int responseTime = arrivalTime[i] + maxRespTime; // 到达时间 + 最大响应时间

        // step 8# 更新最小响应时间
        if (responseTime < minResponseTime) {
            minResponseTime = responseTime; // 若当前更小，则更新
        }
    }

    // step 9# 输出所有查询中的最小响应时间
    printf("%d\n", minResponseTime);  // 打印结果

    return 0; // 程序正常结束
}
